home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / misc / gms_dev.lha / GMSDev / Source / Asm / Demos / BigBobs.s < prev    next >
Encoding:
Text File  |  1998-05-18  |  9.4 KB  |  420 lines

  1. ;-------T-------T------------------------T----------------------------------;
  2.  
  3.     INCDIR    "INCLUDES:"
  4.     INCLUDE    "dpkernel/dpkernel.i"
  5.  
  6. MAX_IMAGES =    20
  7.  
  8.     SECTION    "Demo",CODE
  9.  
  10. ;===========================================================================;
  11. ;                             INITIALISE DEMO
  12. ;===========================================================================;
  13.  
  14.     STARTDPK
  15.  
  16. Start:    MOVEM.L    A0-A6/D1-D7,-(SP)
  17.     move.l    DPKBase(pc),a6    ;Load bob picture.
  18.     lea    PIC_BobTags(pc),a0
  19.     CALL    Init
  20.     tst.l    d0
  21.     beq    .Exit
  22.  
  23.     move.l    PIC_Bobs(pc),a1
  24.     move.l    a1,BallPic
  25.     move.l    a1,LacedPic
  26.  
  27.     move.l    PIC_Bitmap(a1),a2
  28.     move.l    BMP_Palette(a2),GSPalette
  29.  
  30.     moveq    #ID_RASTER,d0    ;Get raster object.
  31.     CALL    Get
  32.     move.l    d0,Raster
  33.     beq.s    .Exit
  34.  
  35.     move.l    Raster(pc),a0    ;a0 = Raster
  36.     lea    RastCList(pc),a1    ;a1 = Colourlist
  37.     move.l    a1,RAS_Command(a0)    ;a0 = Raster->Command = Colourlist;
  38.     move.l    a0,RSH_Prev(a1)    ;a1 = Colourlist->Prev = Raster;
  39.  
  40.     lea    ScreenTags(pc),a0    ;Initialise screen.
  41.     sub.l    a1,a1
  42.     CALL    Init
  43.     tst.l    d0
  44.     beq.s    .Exit
  45.  
  46. ;--------------------------------------------------------------------------;
  47. ;Initialise restore and bob objects.
  48.  
  49.     lea    RestoreTags(pc),a0    ;a0 = Restore tags.
  50.     move.l    Screen(pc),a1    ;a1 = Screen.
  51.     CALL    Init    ;>> = Initialise the restore.
  52.     tst.l    d0    ;d0 = Check for errors.
  53.     beq.s    .Exit    ;>> = Error, exit.
  54.  
  55.     lea    TAGS_Ball(pc),a0    ;Initialise the Ball mbob.
  56.     move.l    Screen(pc),a1
  57.     CALL    Init
  58.     tst.l    d0
  59.     beq.s    .Exit
  60.  
  61.     lea    TAGS_Interlaced(pc),a0    ;Initialise "HiRes Interlaced" bob.
  62.     move.l    Screen(pc),a1
  63.     CALL    Init
  64.     tst.l    d0
  65.     beq.s    .Exit
  66.  
  67. ;--------------------------------------------------------------------------;
  68. ;Initialise joydata object.
  69.  
  70.     moveq    #ID_JOYDATA,d0    ;Get joydata structure for reading
  71.     CALL    Get    ;port 0.
  72.     move.l    d0,JoyData
  73.     beq.s    .Exit
  74.     move.l    d0,a0    ;Initialise the joydata structure.
  75.     sub.l    a1,a1
  76.     CALL    Init
  77.     tst.l    d0
  78.     beq.s    .Exit
  79.  
  80.     move.l    Screen(pc),a0
  81.     CALL    Display
  82.  
  83.     bsr.s    Main
  84.  
  85. .Exit    move.l    DPKBase(pc),a6
  86.     move.l    JoyData(pc),a0
  87.     CALL    Free
  88.     move.l    BOB_Interlaced(pc),a0
  89.     CALL    Free
  90.     move.l    MBOB_Ball(pc),a0
  91.     CALL    Free
  92.     move.l    Raster(pc),a0
  93.     CALL    Free
  94.     move.l    Restore(pc),a0
  95.     CALL    Free
  96.     move.l    Screen(pc),a0
  97.     CALL    Free
  98.     move.l    PIC_Bobs(pc),a0
  99.     CALL    Free
  100.     move.l    Raster(pc),a0
  101.     CALL    Free
  102.     MOVEM.L    (SP)+,A0-A6/D1-D7
  103.     moveq    #ERR_OK,d0
  104.     rts
  105.  
  106. ;===========================================================================;
  107. ;                                DEMO CODE
  108. ;===========================================================================;
  109.  
  110. Main:    move.l    Screen(pc),a2    ;a2 = Screen.
  111.     move.l    GS_Bitmap(a2),a3    ;a3 = Bitmap.
  112.  
  113.     move.l    BOB_Interlaced(pc),a1    ;a1 = Bob to draw.
  114.     move.w    GS_Width(a2),d0
  115.     sub.w    BOB_Width(a1),d0
  116.     move.w    d0,BOB_XCoord(a1)
  117.  
  118.     move.l    DPKBase(pc),a6    ;a6 = DPKBase.
  119.     move.l    GS_MemPtr2(a2),BMP_Data(a3)
  120.     move.l    BOB_Interlaced(pc),a0    ;a0 = Bob to draw.
  121.     CALL    Draw    ;>> = Draw the Bob
  122.  
  123.     move.l    GS_MemPtr1(a2),BMP_Data(a3)
  124.     move.l    BOB_Interlaced(pc),a0    ;a0 = Bob to draw.
  125.     CALL    Draw    ;>> = Draw the Bob
  126.  
  127.     moveq    #$00,d7
  128.     move.l    MBOB_Ball(pc),a1
  129.     move.l    MB_EntryList(a1),a2    ;a2 = First entry.
  130.     move.w    MB_AmtEntries(a1),d2    ;a2 = Amount of entries.
  131.     subq.w    #1,d2    ;d2 = --1 for loop.
  132.     moveq    #$00,d3
  133.  
  134. .create    eor.w    #1,d3
  135.     moveq    #8,d1    ;Set Y speed here.
  136.     CALL    FastRandom
  137.     addq.w    #2,d0
  138.     move.w    d0,BE_YSpeed(a2)
  139.     move.w    #8,d1    ;Set X speed here.
  140.     CALL    FastRandom
  141.     addq.w    #1,d0
  142.     move.w    d0,BE_XSpeed(a2)
  143.     tst.w    d3
  144.     beq.s    .posx
  145.     neg.w    BE_XSpeed(a2)
  146.  
  147. .posx    move.l    Screen(pc),a0
  148.     move.w    GS_Height(a0),d1    ;Starting Y coordinate.
  149.     asr.w    #1,d1
  150.     CALL    FastRandom
  151.     asr.w    #1,d1
  152.     add.w    d1,d0
  153.     move.w    d0,BE_YCoord(a2)
  154.  
  155.     move.w    GS_Width(a0),d1    ;Starting X coordinate.
  156.     CALL    FastRandom
  157.     move.w    d0,BE_XCoord(a2)
  158.  
  159.     moveq    #12,d1
  160.     CALL    FastRandom
  161.     move.w    d0,BE_Frame(a2)
  162.     move.b    .Sets(pc,d0.w),BE_Set+1(a2)
  163.     move.w    #1,BE_FChange(a2)
  164.     move.w    d3,BE_Locked(a2)
  165.  
  166.     lea    NBE_SIZEOF(a2),a2
  167.     dbra    d2,.create
  168.     bra.s    Loop
  169.  
  170. .Sets    dc.b    0,0,0,0
  171.     dc.b    1,1,1,1
  172.     dc.b    2,2,2,2
  173.  
  174. ;---------------------------------------------------------------------------;
  175.  
  176. Loop:    move.l    Screen(pc),a0    ;a0 = Screen.
  177.     move.l    MBOB_Ball(pc),a1
  178.     addq.w    #1,d7
  179.     move.l    MB_EntryList(a1),a2    ;a2 = First entry.
  180.     move.w    MB_AmtEntries(a1),d2
  181.     subq.w    #1,d2
  182. .update    bsr.s    UpdateBob
  183.     lea    NBE_SIZEOF(a2),a2
  184.     dbra    d2,.update
  185.  
  186.     move.l    DPKBase(pc),a6
  187.     move.l    Restore(pc),a0
  188.     CALL    Activate
  189.  
  190.     move.l    MBOB_Ball(pc),a0    ;a0 = Bob to draw.
  191.     CALL    Draw    ;>> = Draw the Bob.
  192.  
  193.     move.l    SCRBase(pc),a6
  194.     CALL    scrWaitAVBL
  195.  
  196.     move.l    Screen(pc),a0
  197.     CALL    scrSwapBuffers
  198.  
  199.     move.l    DPKBase(pc),a6
  200.     move.l    JoyData(pc),a0
  201.     CALL    Query
  202.     move.l    JoyData(pc),a0
  203.     move.l    JD_Buttons(a0),d0
  204.     btst    #JB_LMB,d0
  205.     beq.s    Loop
  206.     rts
  207.  
  208. ;===========================================================================;
  209. ;                               UPDATE A BOB
  210. ;===========================================================================;
  211. ;Function: Moves the entity according to its internal settings.
  212. ;Requires: a1 = Bob structure.
  213. ;       a2 = Entry to update.
  214.  
  215. GRAVITY =    1
  216.  
  217. UpdateBob:
  218.     move.l    MB_DestBitmap(a1),a0    ;a0 = Bitmap
  219.     move.w    BE_YCoord(a2),d0    ;d0 = YCoord
  220.     add.w    BE_YSpeed(a2),d0    ;d0 = (YCoord)+YSpeed
  221.     cmp.w    BMP_Height(a0),d0    ;d0 = Should this bob bounce?
  222.     blt.s    .NoBounce    ;>> = No.
  223.     neg.w    BE_YSpeed(a2)    ;a2 = Bounce the bob!
  224.     addq.w    #GRAVITY,BE_YSpeed(a2)    ;a2 = Gravity pushes the bob down.
  225.     bra.s    .CheckX
  226. .NoBounce
  227.     move.w    d0,BE_YCoord(a2)    ;d0 = Save the change.
  228.     addq.w    #GRAVITY,BE_YSpeed(a2)    ;a2 = Gravity pushes the bob down.
  229.  
  230. .CheckX    move.w    BE_XCoord(a2),d0
  231.     add.w    BE_XSpeed(a2),d0
  232.     cmp.w    BMP_Width(a0),d0
  233.     bcs.s    .NoXBounce
  234.     neg.w    BE_XSpeed(a2)
  235.     bra.s    .Animate
  236. .NoXBounce
  237.     move.w    d0,BE_XCoord(a2)
  238.  
  239. ;---------------------------------------------------------------------------;
  240.  
  241. .Animate
  242.     tst.w    BE_Locked(a2)
  243.     beq.s    .exit
  244.     move.w    d7,d6
  245.     and.w    #%00000011,d6
  246.     bne.s    .exit
  247.     move.w    BE_FChange(a2),d1
  248.     bgt.s    .Positive
  249.  
  250. .Negative
  251.     cmp.w    #1,BE_Set(a2)
  252.     bgt.s    .NBlue
  253.     beq.s    .NGreen
  254. .NRed    add.w    d1,BE_Frame(a2)
  255.     tst    BE_Frame(a2)
  256.     bge.s    .exit
  257.     move.w    #1,BE_FChange(a2)
  258.     clr.w    BE_Frame(a2)
  259.     rts
  260.  
  261. .NGreen    add.w    d1,BE_Frame(a2)
  262.     cmp.w    #4,BE_Frame(a2)
  263.     bge.s    .done
  264.     move.w    #1,BE_FChange(a2)
  265.     move.w    #4,BE_Frame(a2)
  266.     rts
  267.  
  268. .NBlue    add.w    d1,BE_Frame(a2)
  269.     cmp.w    #8,BE_Frame(a2)
  270.     bge.s    .done
  271.     move.w    #1,BE_FChange(a2)
  272.     move.w    #8,BE_Frame(a2)
  273. .exit    rts
  274.  
  275. .Positive
  276.     cmp.w    #1,BE_Set(a2)
  277.     bgt.s    .PBlue
  278.     beq.s    .PGreen
  279. .PRed    add.w    d1,BE_Frame(a2)
  280.     cmp.w    #3,BE_Frame(a2)
  281.     ble.s    .done
  282.     move.w    #-1,BE_FChange(a2)
  283.     move.w    #2,BE_Frame(a2)
  284.     rts
  285.  
  286. .PGreen    add.w    d1,BE_Frame(a2)
  287.     cmp.w    #7,BE_Frame(a2)
  288.     ble.s    .done
  289.     move.w    #-1,BE_FChange(a2)
  290.     move.w    #6,BE_Frame(a2)
  291.     rts
  292.  
  293. .PBlue    add.w    d1,BE_Frame(a2)
  294.     cmp.w    #11,BE_Frame(a2)
  295.     ble.s    .done
  296.     move.w    #-1,BE_FChange(a2)
  297.     move.w    #10,BE_Frame(a2)
  298. .done    rts
  299.  
  300. ;===========================================================================;
  301. ;                                  DATA
  302. ;===========================================================================;
  303.  
  304.   STRUCTURE    NBE,BE_SIZEOF    ;Definition for the mutated Entry-
  305.     WORD    BE_XSpeed    ;list in the Ball bob.
  306.     WORD    BE_YSpeed
  307.     WORD    BE_Set    ;0 = Red, 1 = Green, 2 = Blue.
  308.     WORD    BE_FChange
  309.     WORD    BE_Locked
  310.     LABEL    NBE_SIZEOF
  311.  
  312. JoyData:    dc.l  0
  313.  
  314. ;---------------------------------------------------------------------------;
  315.  
  316. RestoreTags:    dc.l  TAGS_RESTORE
  317. Restore:    dc.l  0
  318.         dc.l  RSA_Entries,MAX_IMAGES
  319.         dc.l  TAGEND
  320.  
  321. ;---------------------------------------------------------------------------;
  322.  
  323. ScreenTags:    dc.l  TAGS_SCREEN
  324. Screen:        dc.l  0
  325.         dc.l  GSA_Raster
  326. Raster:        dc.l  0
  327.         dc.l  GSA_Width,640
  328.         dc.l  GSA_Height,512
  329.         dc.l  GSA_Attrib,SCR_DBLBUFFER
  330.         dc.l  GSA_ScrMode,SM_HIRES|SM_LACED
  331.         dc.l    GSA_BitmapTags,0
  332.         dc.l    BMA_Palette
  333. GSPalette:    dc.l    0
  334.         dc.l    TAGEND,0
  335.         dc.l  TAGEND
  336.  
  337. RastCList:    dc.w  ID_RASTCOLOURLIST,1
  338.         dc.l  0,0,0
  339.         dc.w  300,30    ;YCoord, Skip
  340.         dc.l  0    ;Colour
  341.         dc.l  .colours    ;Values
  342.  
  343. .colours    dc.l  $100000,$200000,$300000,$400000,$500000,$600000,$700000
  344.         dc.l  -1
  345.  
  346. ;---------------------------------------------------------------------------;
  347.  
  348. PIC_BobTags:    dc.l  TAGS_PICTURE
  349. PIC_Bobs:    dc.l  0
  350.         dc.l  PCA_Options,IMG_RESIZE
  351.         dc.l  PCA_Source,.file
  352.         dc.l    PCA_BitmapTags,0
  353.         dc.l    BMA_Width,96*2
  354.         dc.l    BMA_Height,71*2
  355.         dc.l    BMA_MemType,MEM_VIDEO
  356.         dc.l    TAGEND,0
  357.         dc.l  TAGEND
  358.  
  359. .file        FILENAME "GMS:demos/data/PIC.HRPulse"
  360.  
  361. ;---------------------------------------------------------------------------;
  362.  
  363. TAGS_Ball:    dc.l  TAGS_MBOB
  364. MBOB_Ball:    dc.l  0
  365.         dc.l  MBA_AmtEntries,MAX_IMAGES
  366.         dc.l  MBA_GfxCoords,BallFrames
  367.         dc.l  MBA_Width,32
  368.         dc.l  MBA_Height,32
  369.         dc.l  MBA_EntryList,Images
  370.         dc.l  MBA_Attrib,BBF_GENMASKS|BBF_CLRNOMASK|BBF_CLEAR|BBF_CLIP
  371.         dc.l  MBA_Source
  372. BallPic:    dc.l  0
  373.         dc.l  MBA_EntrySize,NBE_SIZEOF
  374.         dc.l  TAGEND
  375.  
  376. BallFrames:    dc.w  00,32*0    ;RED
  377.         dc.w  00,32*1
  378.         dc.w  00,32*2
  379.         dc.w  00,32*3
  380.         dc.w  32,32*0    ;GREEN
  381.         dc.w  32,32*1
  382.         dc.w  32,32*2
  383.         dc.w  32,32*3
  384.         dc.w  64,32*0    ;BLUE
  385.         dc.w  64,32*1
  386.         dc.w  64,32*2
  387.         dc.w  64,32*3
  388.         dc.l  -1
  389.  
  390. ;---------------------------------------------------------------------------;
  391.  
  392. TAGS_Interlaced    dc.l  TAGS_BOB
  393. BOB_Interlaced:    dc.l  0
  394.         dc.l  BBA_GfxCoords,LacedFrames
  395.         dc.l  BBA_Width,96*2
  396.         dc.l  BBA_Height,7*2
  397.         dc.l  BBA_Attrib,BBF_GENMASKS|BBF_CLIP
  398.         dc.l  BBA_Source
  399. LacedPic:    dc.l  0
  400.         dc.l  TAGEND
  401.  
  402. LacedFrames:    dc.w  0,16*4*2    ;X/Y Graphic
  403.         dc.l  -1
  404.  
  405. ;---------------------------------------------------------------------------;
  406.  
  407.     SECTION    Images,BSS
  408.  
  409. Images    ds.b    NBE_SIZEOF*MAX_IMAGES    ;X/Y/Frame/Speed/Set/FChange/Locked
  410.  
  411. ;===========================================================================;
  412.  
  413. ProgName:    dc.b  "Big Bouncing Bobs",0
  414. ProgAuthor:    dc.b  "Paul Manias",0
  415. ProgDate:    dc.b  "January 1998",0
  416. ProgCopyright:    dc.b  "DreamWorld Productions (c) 1996-1998.  Freely distributable.",0
  417. ProgShort:    dc.b  "Multiple bobs demo.",0
  418.         even
  419.  
  420.